/**
 * 英雄玩家坦克
 * 横坐标，纵坐标，图片
 */
class Hero {
    //构造函数
    constructor() {
        this.x = 200;
        this.y = 200;
        this.img = imgList[0];
        // 默认情况下，图片有多大，坦克就有多大
        this.width = this.img.width;
        this.height = this.img.height;
        //移动速度
        this.speed = 10;
        //方向
        this.dir = "up";
        //玩家1头像的图片
        this.headImg = imgList[8];
        //玩家1的总血量
        this.totalHP = 100;
        //玩家1的当前血量
        this.HP = 80;
        //当前是否正在发射子弹【主要是为了控制子弹的发射频率】
        this.isFire = false;
        //构建发射子弹音效的资源池【这里使用了立即执行函数】
        this.boomAudioList = (function () {
            let arr = [];
            for (let i = 0; i < 10; i++) {
                let audio = new Audio();
                audio.src = "./music/03.mp3";
                arr.push(audio);
                audio.load();
            }
            return arr;
        })();
        //当前玩家的得分
        this.score = 0;


    }
    /**
     * 完成一个方法，拿到画笔，自己把自己画出来
     * @param {CanvasRenderingContext2D} ctx 
     */
    draw(ctx) {
        //在每次绘制自己之前，根据自己的方向拿到图片
        if (this.dir == "up") {
            this.img = imgList[0];
        }
        else if (this.dir == "down") {
            this.img = imgList[1];
        }
        else if (this.dir == "left") {
            this.img = imgList[2];
        }
        else if (this.dir == "right") {
            this.img = imgList[3];
        }
        //调用一下移动的方法，让自己移动一下
        this.move();


        ctx.drawImage(this.img, this.x, this.y, this.width, this.height);

        //画头像
        ctx.drawImage(this.headImg, 10, 10, 50, 50);
        //画空心的矩形
        ctx.strokeStyle = "white";
        ctx.strokeRect(70, 12, 150, 20);
        ctx.fillStyle = "red";
        ctx.fillRect(70, 12, 150 * this.HP / this.totalHP, 20);
        //画得分
        ctx.font = "18px 微软雅黑";
        ctx.textBaseline = "bottom";
        ctx.fillText("得分：" + this.score, 70, 60);
    }
    /**
     * 移动，ASDW四个键移动
     * a:65 s:83 d:68 w:87
     * 根据keySet里面的按键来决定怎么移动
     */
    move() {
        //水平方向的X，垂直方向Y，移动左负右正，上负下正
        if (keySet.has(65)) { //a
            this.x -= this.speed;
            this.dir = "left";
        }
        else if (keySet.has(68)) { //d
            this.x += this.speed;
            this.dir = "right";
        }
        else if (keySet.has(87)) { //w
            this.y -= this.speed;
            this.dir = "up";
        }
        else if (keySet.has(83)) { //s
            this.y += this.speed;
            this.dir = "down";
        }
        //不能让自己移动到屏幕的外边去
        if (this.x < 0) {
            this.x = 0;
        }
        else if (this.x > game.width - this.width) {
            this.x = game.width - this.width;
        }
        if (this.y < 0) {
            this.y = 0;
        }
        else if (this.y > game.height - this.height) {
            this.y = game.height - this.height;
        }
    }
    //发射
    shoot() {
        //创建子弹
        let b = new Bullet(this.x, this.y, this.dir);
        //修正子弹的坐标
        b.x = this.x + this.width / 2 - b.width / 2;
        b.y = this.y + this.height / 2 - b.height / 2;

        //子弹不可能只有一颗，所以应该是有一个集合装起来
        bulletList.push(b);

        //添加发子弹音效,使用资源池,shift就是从数组的最前面拿一个元素出来
        let audio = this.boomAudioList.shift();
        console.log(audio);
        audio.play();
        //播放完了以后，再次这个音频放回到资源池的最后
        this.boomAudioList.push(audio);

    }
}